package leetcode_day._2022._202203._2131;

/**
 * @author yzh
 * @version 1.0
 * @date 2022/3/29 21:29
 * 考试的最大困扰度
 * 算法：滑动窗口
 * 分别算出 T 和 F 消耗 k 次后的最大长度
 * 使用双指针维护一个窗口，这出这个窗口的最大值
 * 当 answerKey.charAt(r) 不为目标字符时，消耗一次，sum++
 * 当 sum > k 时，就移动 l
 */
public class _29_2024 {

    public int maxConsecutiveAnswers(String answerKey, int k) {
        return Math.max(getCnt('T', answerKey, k), getCnt('F', answerKey, k));
    }
    int getCnt(char t, String answerKey, int k) {
        int len = answerKey.length(), ans = 0;
        for (int l = 0, r = 0, sum = 0; r < len; r++) {
            sum += answerKey.charAt(r) == t ? 0 : 1;
            // sum = k 时，刚好消耗 k 次
            while (sum > k) sum -= answerKey.charAt(l++) == t ? 0 : 1;
            ans = Math.max(ans, r - l + 1);
        }
        return ans;
    }

}
